﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Text;
using BusinessLogicLayer;
using DataTransferObject;
namespace Main
{
    public partial class TaoDeTuDong : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ScriptManager.RegisterStartupScript(base.Page, this.GetType(), "tb", "Enable('hidden');", true);
                RegisterScriptCheck();
                ChuyenMucBLL ChuyenMucService = new ChuyenMucBLL();
                List<clsChuyenMuc> DanhSachChuyenMuc = ChuyenMucService.LayDanhSachChuyenMuc();
                DanhSachChuyenMuc.Insert(0, new clsChuyenMuc(-1, "--Chọn chuyên mục--", ""));
                ddlChuyenMuc.DataSource = DanhSachChuyenMuc;
                ddlChuyenMuc.DataTextField = "TenChuyenMuc";
                ddlChuyenMuc.DataValueField = "MaChuyenMuc";
                ddlChuyenMuc.DataBind();
                divTools.Visible = false;
             
            }
        }
        private void RegisterScriptCheck()
        {
            string myScript = @"function Check()
            {
                var txtTenDe = document.getElementById('" + txtTenDe.ClientID + @"');
                var dropChuyenMuc = document.getElementById('" + ddlChuyenMuc.ClientID + @"');
                var txtMoTa = document.getElementById('" + txtMoTa.ClientID + @"');
                var txtchDonCan = document.getElementById('" + txtSoCauHoiDonCan.ClientID + @"');
                var txtchDoanVanCan = document.getElementById('" + txtSoCauDoanVanCan.ClientID + @"');
                var txtchMp3Can = document.getElementById('" + txtSoCauMp3can.ClientID + @"');
                var txtchVideoCan = document.getElementById('" + txtSoCauVideoCan.ClientID + @"');
                var txtKhoangCauHoiDon = document.getElementById('" + txtKhoangCauHoiDon.ClientID + @"');
                var txtKhoangCauHoiDoanVan = document.getElementById('" + txtKhoangCaHoiDoanVan.ClientID + @"');
                var txtKhoangCauHoiMp3 = document.getElementById('" + txtKhoangCauHoiMp3.ClientID + @"');
                var txtchKhoangCauHoiVideo = document.getElementById('" + txtKhoangCauHoiVideo.ClientID + @"');
                var arr1 = txtKhoangCauHoiDon.value.split('-');
                var arr2 = txtKhoangCauHoiDoanVan.value.split('-');
                var arr3 = txtKhoangCauHoiMp3.value.split('-');
                var arr4 = txtchKhoangCauHoiVideo.value.split('-');
                var i = parseInt(txtchDonCan.value);
                var j = parseInt(txtchDoanVanCan.value);
                var h = parseInt(txtchMp3Can.value);
                var k = parseInt(txtchVideoCan.value);
                var kq='';
                if(txtTenDe.value=='')
                    kq='Chưa nhập tên đề';
                if(dropChuyenMuc.selectedIndex==0)
                    kq+='\nChưa chọn chuyên mục.';
                if(i == 0 && j == 0 && h == 0 && k == 0)
                    kq+='\nBạn chưa xác định số câu hỏi cho đề.';
                else
                {
                 
                    if(i != 0)
                    {
                        if(arr1[0] == arr1[1] || (arr1[1] - arr1[0] + 1) < i)
                            kq+='\nKhoảng câu hỏi đơn cần lấy không hợp lệ.';
                    }
                    else if(j != 0)
                    {
                        if(arr2[0] == arr2[1] || (arr2[1] - arr2[0] + 1) < j)
                            kq+='\nKhoảng câu hỏi đoạn văn cần lấy không hợp lệ.';
                    }
                    else if(h != 0)
                    {
                        if(arr3[0] == arr3[1] || (arr3[1] - arr3[0] + 1) < h)
                            kq+='\nKhoảng câu hỏi mp3 cần lấy không hợp lệ.';
                    }
                    else if(k != 0)
                    {
                        if(arr4[0] == arr4[1] || (arr4[1] - arr4[0] + 1) < k)
                            kq+='\nKhoảng câu hỏi video cần lấy không hợp lệ.';
                
                    }
                }
                if(kq!='')
                {
                    alert(kq);
                    return false;
                }
                return true;
            }";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "check", myScript, true);
            lnkThucHien.Attributes.Add("onclick", "return Check();");
        }
        protected void ddlChuyenMuc_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlChuyenMuc.SelectedIndex <= 0)
            {
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "tb", "Enable('hidden');", true);
                return;
            }
            try
            {
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "tb", "Enable('visible');", true);
                int machuyenmuc = Convert.ToInt32(ddlChuyenMuc.SelectedValue);
                CauHoiBLL cauhoiService = new CauHoiBLL();
                int socauhoidon = cauhoiService.SoCauHoi(1, machuyenmuc);
                int socauhoidoanvan = cauhoiService.SoCauHoi(2, machuyenmuc);
                int socauhoimp3 = cauhoiService.SoCauHoi(3, machuyenmuc);
                int socauhoivideo = cauhoiService.SoCauHoi(4, machuyenmuc);
                if (socauhoidoanvan == 0 && socauhoidon == 0 && socauhoimp3 == 0 && socauhoivideo == 0)
                {
                    Errors.Visible = false;
                    Notice.Visible = true;
                    Notice.InnerHtml = "Không có câu hỏi nào ứng với chuyên mục:" + ddlChuyenMuc.SelectedItem.Text;
                    return;
                }
                else
                {
                    Notice.Visible = false;
                }
                lblSoCauDoc.Text = socauhoidon.ToString();
                lblSoCauHoiDoanVan.Text = socauhoidoanvan.ToString();
                lblSoCauHoiMp3.Text = socauhoimp3.ToString();
                lblSoCauHoiVideo.Text = socauhoivideo.ToString();
                Common cm = new Common();
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider4", cm.Slider(divCauHoiDonCan.ClientID, txtSoCauHoiDonCan.ClientID, socauhoidon, 0), true);
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider7", cm.Slider(divCauHoiVideoCan.ClientID, txtSoCauVideoCan.ClientID, socauhoivideo, 0), true);
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider6", cm.Slider(divCauHoiMp3Can.ClientID, txtSoCauMp3can.ClientID, socauhoimp3, 0), true);
                ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider5", cm.Slider(divCaHoiDoanVanCan.ClientID, txtSoCauDoanVanCan.ClientID, socauhoidoanvan, 0), true);
                if (socauhoidon > 0)
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider", cm.Slider(divKhoangCauHoiDon.ClientID, txtKhoangCauHoiDon.ClientID, socauhoidon), true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider", cm.Slider(divKhoangCauHoiDon.ClientID, txtKhoangCauHoiDon.ClientID, socauhoidon, 0), true);
                }
                if (socauhoivideo > 0)
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider3", cm.Slider(divCauHoiVideo.ClientID, txtKhoangCauHoiVideo.ClientID, socauhoivideo), true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider3", cm.Slider(divCauHoiVideo.ClientID, txtKhoangCauHoiVideo.ClientID, socauhoivideo, 0), true);
                }

                if (socauhoimp3 > 0)
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider2", cm.Slider(divCauHoiMp3.ClientID, txtKhoangCauHoiMp3.ClientID, socauhoimp3), true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider2", cm.Slider(divCauHoiMp3.ClientID, txtKhoangCauHoiMp3.ClientID, socauhoimp3, 0), true);
                }
                if (socauhoidoanvan > 0)
                {

                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider1", cm.Slider(divKhoangCauHoiDoanVan.ClientID, txtKhoangCaHoiDoanVan.ClientID, socauhoidoanvan), true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(base.Page, this.GetType(), "slider1", cm.Slider(divKhoangCauHoiDoanVan.ClientID, txtKhoangCaHoiDoanVan.ClientID, socauhoidoanvan, 0), true);
                }
                
                
            }
            catch (Exception ex)
            {
                Errors.InnerText = ex.Message;
                Errors.Visible = true;
                Notice.Visible = false;
            }
    
        }

        protected void lnkThucHien_Click(object sender, EventArgs e)
        {
            int MaDe = 0;
            BoDeBLL bodeService = new BoDeBLL();
            try
            {
                int socauhoi = 0, start = 0, end = 0;
                int machuyenmuc = Convert.ToInt32(ddlChuyenMuc.SelectedValue);
                clsBoDe bode = new clsBoDe(txtTenDe.Text, machuyenmuc, txtMoTa.Text);
                bodeService.ThemBoDe(bode);

                MaDe = bodeService.MaDeHienTai();
                TaoDeTuDongBLL taodetudongService = new TaoDeTuDongBLL(MaDe);

                socauhoi = Convert.ToInt32(txtSoCauHoiDonCan.Value);
                Set_Start_End(ref start, ref end, txtKhoangCauHoiDon.Value);
                taodetudongService.RandomCauHoiDon(socauhoi, start, end, machuyenmuc);

                socauhoi = Convert.ToInt32(txtSoCauDoanVanCan.Value);
                Set_Start_End(ref start, ref end, txtKhoangCaHoiDoanVan.Value);
                taodetudongService.RandomCauHoiDoanVan(socauhoi, start, end, machuyenmuc);

                socauhoi = Convert.ToInt32(txtSoCauMp3can.Value);
                Set_Start_End(ref start, ref end, txtKhoangCauHoiMp3.Value);
                taodetudongService.RandomCauHoiMp3(socauhoi, start, end, machuyenmuc);

                socauhoi = Convert.ToInt32(txtSoCauVideoCan.Value);
                Set_Start_End(ref start, ref end, txtKhoangCauHoiVideo.Value);
                taodetudongService.RandomCauHoiVideo(socauhoi, start, end, machuyenmuc);

                taodetudongService.Save();
            }
            catch (Exception ex)
            {
                Errors.InnerText = ex.Message;
                Errors.Visible = true;
                Notice.Visible = false;
            }
            finally
            {
                Form.Visible = false;
                divTools.Visible = true;
                //Form này còn nhiều chỗ chưa hợp lý --- Cần cải tiến nhiều: như việc thêm một nút để xóa bộ đề tự động vừa tạo (nếu người dùng không vừa ý)
                HidMaDe.Value = MaDe.ToString();
                divDisLay.InnerHtml = HienThiBoDe(MaDe);
            }
        }
        public string HienThiBoDe(int MaDe)
        {
            BoDeBLL bodeService = new BoDeBLL();
            List<clsCauHoi> DanhSachCauHoi = bodeService.LayDanhSachCauHoiThuocBoDe(MaDe,0);
            int i = 1;
            StringBuilder output = new StringBuilder();
            output.Append("<h2>Danh Sách Câu Hỏi Trong Đề Vừa Tạo</h2><br />");
            foreach (clsCauHoi ch in DanhSachCauHoi)
            {
                Common cm = new Common();
                if (!(cm.IsCauHoiCha(ch.LoaiCauHoi) || ch.LoaiCauHoi == 6))
                {
                    int madapandung = -1;
                    if (ch.DanhSachDapAn != null)
                    {
                        foreach (clsDapAn da in ch.DanhSachDapAn)
                        {
                            if (da.DapAnDung == 1)
                            {
                                madapandung = da.MaDapAn;
                            }
                        }
                    }
                    output.Append(XuatCauHoiRaManHinh(ch, ref i, 0, madapandung));
                }
                else
                {
                    output.Append(XuatCauHoiRaManHinh(ch, ref i, -1, -1)).AppendLine();
                }
            }
            return output.ToString();
        }
        // Xuất Câu hỏi ra màn hình
        private string XuatCauHoiRaManHinh(clsCauHoi CauHoi, ref int i, int flag, int MaDapAnDung)
        {
            StringBuilder str = new StringBuilder();
            if (flag == -1)
            {
                //Nếu là Câu Hỏi Cha thì không đặt trong FieldSet
                str.AppendFormat("<p><strong>{0}</strong></p>", CauHoi.NoiDung).AppendLine();
            }
            else
            {
                str.AppendFormat("<fieldset><legend>Câu {0}</legend><span>{1}</span>", String.Format("{0:00}", i), CauHoi.NoiDung).AppendLine();
                if (flag == 0)
                {
                    int j = 65;
                    if (CauHoi.DanhSachDapAn != null && CauHoi.DanhSachDapAn.Count > 0)
                    {
                        foreach (clsDapAn DapAn in CauHoi.DanhSachDapAn)
                        {
                            str.AppendFormat("<p><input type='radio' disabled='disabled' name='{0}' value='{1}' />", CauHoi.MaCauHoi, DapAn.MaDapAn).AppendLine();
                            str.AppendFormat("{0}. {1}</p>", Convert.ToChar(j++).ToString(), DapAn.NoiDung).AppendLine();
                        }
                    }
                }
                str.Append("</fieldset>").AppendLine();
                i++;
            }
            return str.ToString();
        }

        private void Set_Start_End(ref int start, ref int end, string val)
        {
            if (val.IndexOf("-") != -1)
            {
                string[] arr = val.Split('-');
                start = Convert.ToInt32(arr[0]);
                end = Convert.ToInt32(arr[1]);
            }
            else
            {
                start = 0;
                end = 0;
            }
        }

        protected void lnkRefresh_Click(object sender, EventArgs e)
        {
            if (HidMaDe.Value != "")
            {
                divDisLay.InnerHtml =  HienThiBoDe(Convert.ToInt32(HidMaDe.Value));
            }
        }
    }
}